Sync to upstream.
authorMatthias Clasen <mclasen@redhat.com>
Fri, 29 Apr 2005 18:24:38 +0000 (18:24 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Fri, 29 Apr 2005 18:24:38 +0000 (18:24 +0000)
2005-04-29  Matthias Clasen  <mclasen@redhat.com>

* Sync to upstream.

gtk/xdgmime/ChangeLog
gtk/xdgmime/xdgmime.c
gtk/xdgmime/xdgmime.h
gtk/xdgmime/xdgmimeint.c
gtk/xdgmime/xdgmimemagic.c

index 1cd2486fe27c79dc1ef80c888c2013ff4ac954e3..c746d85d722d34673ca49cca7ff00f4c86699676 100644 (file)
@@ -1,3 +1,7 @@
+2005-04-29  Matthias Clasen  <mclasen@redhat.com>
+
+       * Sync to upstream.
+
 2005-04-08  Matthias Clasen  <mclasen@redhat.com>
 
        * xdgmimecache.c (cache_magic_matchlet_compare_to_data) 
index 51a9c07f6af62fb6f4918af36f84e5b6e2409542..6b400d9ebd4892a7b8cbd48a98f880dbd42a8a10 100644 (file)
@@ -147,6 +147,7 @@ xdg_mime_init_from_directory (const char *directory)
          return FALSE;
        }
     }
+  free (file_name);
 
   file_name = malloc (strlen (directory) + strlen ("/mime/globs") + 1);
   strcpy (file_name, directory); strcat (file_name, "/mime/globs");
@@ -563,6 +564,12 @@ xdg_mime_shutdown (void)
       _xdg_mime_alias_list_free (alias_list);
       alias_list = NULL;
     }
+
+  if (parent_list)
+    {
+      _xdg_mime_parent_list_free (parent_list);
+      parent_list = NULL;
+    }
   
   for (list = callback_list; list; list = list->next)
     (list->callback) (list->data);
@@ -668,7 +675,7 @@ xdg_mime_mime_type_subclass (const char *mime,
   /* We really want to handle text/ * in GtkFileFilter, so we just
    * turn on the supertype matching
    */
-#if 1
+#if 1  
   /* Handle supertypes */
   if (xdg_mime_is_super_type (ubase) &&
       xdg_mime_media_type_equal (umime, ubase))
index db69b1243f5aeb65cc96b3aaa9b9b39e619c4130..92ee60e26a14f995e0ed143e312ad751a6082dd4 100644 (file)
@@ -54,6 +54,7 @@ typedef void (*XdgMimeDestroy)  (void *user_data);
 #define xdg_mime_media_type_equal             XDG_ENTRY(media_type_equal)
 #define xdg_mime_mime_type_subclass           XDG_ENTRY(mime_type_subclass)
 #define xdg_mime_get_mime_parents             XDG_ENTRY(get_mime_parents)
+#define xdg_mime_list_mime_parents            XDG_ENTRY(list_mime_parents)
 #define xdg_mime_unalias_mime_type            XDG_ENTRY(unalias_mime_type)
 #define xdg_mime_get_max_buffer_extents       XDG_ENTRY(get_max_buffer_extents)
 #define xdg_mime_shutdown                     XDG_ENTRY(shutdown)
@@ -77,7 +78,13 @@ int          xdg_mime_media_type_equal             (const char *mime_a,
                                                    const char *mime_b);
 int          xdg_mime_mime_type_subclass           (const char *mime_a,
                                                    const char *mime_b);
+  /* xdg_mime_get_mime_parents() is deprecated since it does
+   * not work correctly with caches. Use xdg_mime_list_parents() 
+   * instead, but notice that that function expects you to free
+   * the array it returns. 
+   */
 const char **xdg_mime_get_mime_parents            (const char *mime);
+char **      xdg_mime_list_mime_parents                   (const char *mime);
 const char  *xdg_mime_unalias_mime_type                   (const char *mime);
 int          xdg_mime_get_max_buffer_extents       (void);
 void         xdg_mime_shutdown                     (void);
index c24f8194ecca6018b836e3d6eac7d047a0867ade..4a0ac4cc397e1d8b6f1c357b9731d4b46445a719 100644 (file)
@@ -41,7 +41,7 @@
 #define        TRUE    (!FALSE)
 #endif
 
-static const unsigned char _xdg_utf8_skip_data[256] = {
+static const char _xdg_utf8_skip_data[256] = {
   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
index b98c1e7321e916d59e5d0479865a158bbcf374ae..352886d0f626c0faa3b0cf05be2e37849cf9be8f 100644 (file)
@@ -268,7 +268,7 @@ _xdg_mime_magic_parse_header (FILE *magic_file, XdgMimeMagicMatch *match)
   if (c != ':')
     return XDG_MIME_MAGIC_ERROR;
 
-  buffer = _xdg_mime_magic_read_to_newline (magic_file, &end_of_file);
+  buffer = (char *)_xdg_mime_magic_read_to_newline (magic_file, &end_of_file);
   if (end_of_file)
     return XDG_MIME_MAGIC_EOF;
 
@@ -520,8 +520,7 @@ _xdg_mime_magic_matchlet_compare_to_data (XdgMimeMagicMatchlet *matchlet,
                                          size_t                len)
 {
   int i, j;
-
-  for (i = matchlet->offset; i <= matchlet->offset + matchlet->range_length; i++)
+  for (i = matchlet->offset; i < matchlet->offset + matchlet->range_length; i++)
     {
       int valid_matchlet = TRUE;
 
@@ -657,16 +656,20 @@ _xdg_mime_magic_lookup_data (XdgMimeMagic *mime_magic,
                             size_t        len)
 {
   XdgMimeMagicMatch *match;
+  const char *mime_type;
 
+  mime_type = NULL;
   for (match = mime_magic->match_list; match; match = match->next)
     {
       if (_xdg_mime_magic_match_compare_to_data (match, data, len))
        {
-         return match->mime_type;
+         if ((mime_type == NULL) || (xdg_mime_mime_type_subclass (match->mime_type, mime_type))) {
+           mime_type = match->mime_type;
+         }
        }
     }
 
-  return NULL;
+  return mime_type;
 }
 
 static void